CSS, hoe en waar schrijf ik het?
CSS bestaat uit declaraties. Declaraties schrijf je ofwel inline, binnenin de start-tag van een html element met behulp van het style
attribuut. Of in een stijlregel. Stijlregels staan inline tussen het style
element van het head
element of in een extern css bestand. beschrijft de opmaak van een html element op je webpagina.
Syntaxis
- Video
- Inline declareren:
Je gebruikt het
style
attribuut om CSS declaraties in te plaatsen:<!-- Inline css: staat tussen de html door gebruik te maken van het style attribuut --> <h1 style="color: aqua;">alle headings zijn blok elementen</h1> <a style="color: green;">anchers zijn inline elementen: tweede anker</a> <span style="background-color: red; color: white">span gebruik je om tekst te groeperen inline</span> <div style="color: burlywood;">gebruik je om tekst te groeperen als blok</div>
De gedeclareerde stijl is alleen van toepassing op deze individuele elementen. Als je alle
h1
elementen op de pagina wilt stijlen, heb je stijlregels nodig, interne of externe. - Als je CSS intern of extern wilt declaren gebruik je CSS stijlregels. Elke CSS stijlregel bestaat uit twee delen:
- Een lijst van één of meer keuzeschakelaars (selectoren, die door komma’s van elkaar gescheiden worden), waarop de stijlregel zal worden toegepast. In deze les beperken we ons tot type-selectoren, de naam van het html element om te selecteren waarop de stijldeclaraties van toepassing zullen zijn.
-
Enkelvoudige type-selector
We gebruiken 1 selector, namelijk
h1
:h1 { color: orange; }
Dat betekent dat de stijlregel van toepassing is op alle h1 elementen van de webpagina en dat dus de kleur van de letters in het oranje weergegeven zullen worden.
-
Type-selector lijst
Deze stijlregel bepaalt gemeenschappelijke eigenschappen voor het
html
enbody
element:body, html { min-height: 100% }
De volgende stijlregel bepaalt gemeenschappelijke eigenschappen voor alle titels:
h1, h2, h3, h4, h5, h6 { margin: 0 0 20px; font-weight: 700 }
-
- CSS heeft een aantal manieren om elementen op basis van de afstamming (verwantschap) tussen elementen te selecteren. Je gebruikt deze selectoren om meer specifieke keuze te maken.
- Descendant combinator
article address
Elk address element dat zich tussen de openings- en sluitingstag vanarticle
bevindt. Ook deaddress
elementen die in andere elementen in hetarticle
element staan. Bijvoorbeeld ook hetaddress
element dat in defooter
vanarticle
staat. - Child combinator
article > address
Alleen dieaddress
elementen die 'kinderen' zijn van hetarticle
element. Hetaddress
element dat in defooter
staat zal niet geselecteerd worden.
- Descendant combinator
- Een voorbeeld van een interne CSS stijlregel:
<head> ... <title>Inline CSS</title> <style type="text/css"> h1 { color: orange; background-color: black; } </style> </head>
Deze stijlregel zal toegepast worden op alle
h1
elementen. - Een voorbeeld van een externe CSS stijlregel
Wanneer er iets aan een gebruikte stijl gewijzigd moet worden, hoeft de wijziging niet in elk document afzonderlijk, maar slechts op één plaats in het stijlblad aangebracht te worden.
- We slaan de stijl in een ander bestand op, namelijk een extern stijlblad. Het is de gewoonte om externe css bestanden in een submap met de naam css te plaatsen. In ons voorbeeld plaatsen we de stijlregels dus in het bestand css/style.css.
h1 { color: blue; background-color: Fuchsia; }
- In de HTML-documenten volstaat het met behulp van het link element een eenvoudige verwijzing naar het extern stijlblad te maken:
<head> <title>CSS</title> <link href="css/style.css" rel="stylesheet" type="text/css" /> </head>
- We slaan de stijl in een ander bestand op, namelijk een extern stijlblad. Het is de gewoonte om externe css bestanden in een submap met de naam css te plaatsen. In ons voorbeeld plaatsen we de stijlregels dus in het bestand css/style.css.
- Een lijst van één of meer keuzeschakelaars (selectoren, die door komma’s van elkaar gescheiden worden), waarop de stijlregel zal worden toegepast. In deze les beperken we ons tot type-selectoren, de naam van het html element om te selecteren waarop de stijldeclaraties van toepassing zullen zijn.
Meten
px |
|
em |
|
rem | De CSS3 rem unit bepaalt lettergrootte en andere eigenschappen van een element ten opzichte van het root-element, niet t.o.v. het ouderelement, zoals dat het geval is voor de em-eenheid. Lees meer op There’s more to the CSS rem unit than font sizing, 22/03/2013 en op Robin Rendle, Use `rem` for Global Sizing; Use `em` for Local Sizing, March 12, 2016. |
ex | ex is de hoogte van de x-height van het huidige lettertype. Voorbeeld height: 1ex; wordt bij mijn weten nooit gebruikt; |
% |
|
Oefening
- Video Oefening Deel 1
- We bootsen een recensie-artikel na uit de Standaard van zaterdag 3 oktober 2020. Ik heb stukken tekst weggelaten om het overzichtelijk te maken. Het is niet de bedoeling dat we deze opmaak perfect nabootsen. Onze enige bedoeling is aan de hand van dit voorbeeld met CSS aan de slag te gaan:
- De tekst
recensie recensie
En eerst is er het woord
Wessel te Gussinklo (79) schreef alweer een mateloos boek. Het had het einde van zijn alter ego Ewout Meyster kunnen zijn, maar er komt, als God het belieft, nog meer.
Peter Jacobs
Wessel Te Gussinklo
Op weg naar De Hartz
Koppernik, 504 blz., 24,50 €
★★★★☆
Je kunt een poging doen om de inhoud van Op weg naar De Hartz na te vertellen, maar zo eenvoudig werken Wessel te Gussinklo’s romans meestal niet. Op weg naar De Hartz is het vierde boek over de coming of age van Ewout Meyster. Hier staat hij op de rand van de volwassenheid, de ware liefde en het schrijverschap.Sylvia
In Op weg naar De Hartz pikken we het leven van Ewout Meyster op als hij 18 is, maar verder ligt de chronologie in dit boek grondig overhoop. Hij is intussen een beginnend schrijver, en mede daardoor bijzonder kwetsbaar en beïnvloedbaar. Dat maakt van hem een ideale prooi voor professor Somsen, een charlatan aan wie hij zijn manuscript toevertrouwt.
Vooral daar gaat het om: de moeizame zoektocht van een schrijver naar de juiste woorden - of ‘de goede woorden’
Ondertussen voelt en weet de lezer dat dit een foute boel is, maar Ewout tuint er met open ogen in. Meer nog: Somsen krijgt ook greep op Ewouts seks- en liefdesleven; ook Sylvia, zijn eerste lief, komt in de netten van de gladde goeroe terecht.
Het lijkt allemaal griezelig, maar misschien is het ook om te lachen? De ironische laag die de schrijver aanbrengt, geeft de lezer alvast soelaas; we zitten dan wel in het volle hoofd van Ewout maar we weten meestal beter dan hij. We zouden hem soms willen wakkerschudden, redden zelfs.
Ongetwijfeld put Te Gussinklo voor dit boek weer uit eigen ervaring. Hij studeerde psychologie en kent die wereld van binnenuit. Vandaar, waarschijnlijk, dat het portret van Somsen zo scherp en vernietigend is.
Goede woorden
Wessel te Gussinklo blijkbaar ook niet. Hij is van plan om ons toch nog meer puzzelstukken aan te reiken. Het ‘romannetje’ dat Ewout aan Somsen laat lezen, is teruggevonden (!) en wordt binnenkort gepubliceerd. En misschien komt er nog een deel na het vierde.
Verschenen op zaterdag 3 oktober 2020
Peter Jacobs
Peter Jacobs is redacteur letteren bij De Standaard.
Meer artikels van Peter Jacobs
- Links naar de foto's:
- cover van het boek: https://media.standaardboekhandel.be/-/media/mdm/product/9789083048079/frontImagesLink.img
- foto van Peter Jacobs: https://static.standaard.be/Assets/Images_Upload/2013/05/03/DSMedewerkers_Peter_Jacobs.jpg
- Voorbereiding
- Een nieuwe submap maken in de rootmap webtechnologie met de naam labo3.
- In de map labo3 een nieuw bestand creëren met de naam recensie-op-weg-naar-de-hartz.html.
- De basisstructuur van html toevoegen met ! tab.
- Het title element wijzigen Recensie Op weg naar de Hartz.
- De meta informatie toevoegen:
<meta name="application-name" content="Webtechnologie"> <meta name="description" content="Oefening beginnen met CSS"> <meta name="keywords" content="html, css, selector, style declaration, style rule, border, color, font"> <meta name="author" content="Jef Inghelbrecht"> <meta name="date" content="2020-10-05"> <meta name="time" content="12:23:33">
-
Voeg het
nav
element en de link toe om terug te keren naar de index.html pagina. -
Voeg het
article
element toe. -
Kopieer de tekst van de recensie en plak die tussen de
article
openings- en sluitingstag. -
Klik op shift alt f om de tekst te reformateren.
-
HTML toevoegen:
-
Opmaak met CSS
-
De tekst die in section staat moet in hoofdletters. We gebruiken interne CSS en voegen daarvoor een stijlregel toe in het style element van het head element:
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="application-name" content="Webtechnologie"> <meta name="description" content="Oefening beginnen met CSS"> <meta name="keywords" content="html, css, selector, style declaration, style rule, border, color, font"> <meta name="author" content="Jef Inghelbrecht"> <meta name="date" content="2020-10-05"> <meta name="time" content="12:23:33"> <style> section { text-transform: uppercase; } </style> <title>Recensie Op weg naar de Hartz</title> </head>
- Om het eerste woord recensie in het rood te schrijven zetten we het woord tussen een
span
element en gebruiken een inline declaratie om de tekst in het rood weer te geven:<body> <article> <section> <span style="color: red">recensie</span> recensie </section> ...
- Na wat opzoekwerk op de website van De Standaard heb ik de lettertypes gevonden die in het artikel worden gebruikt. Het algemene lettertype is
Georgia
. Dit wordt toegekend aan het body element. CSS betekent cascading style sheet, d.w.z. dat het lettertype door alle elementen in body overgeërfd wordt. Als alternatief lettertype kiezen we een generiek lettertype, namelijkserif
.<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="application-name" content="Webtechnologie"> <meta name="description" content="Oefening beginnen met CSS"> <meta name="keywords" content="html, css, selector, style declaration, style rule, border, color, font"> <meta name="author" content="Jef Inghelbrecht"> <meta name="date" content="2020-10-05"> <meta name="time" content="12:23:33"> <style> body { font-family: Georgia,serif; } section { text-transform: uppercase; } </style> <title>Recensie Op weg naar de Hartz</title> </head>
- Het lettertype van de tekst in het
section
element is anders. Dus specificeren we de font-family
eigenschap van hetsection
element:section { text-transform: uppercase; /* commentaar in CSS font-family:system,sans-serif; */ font-family:-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif }
- De letter in de introductie (
header
) is iets groter. Vermits we een stijlregel willen die alleen van toepassing is op de header die een directe afstammeling (kind) is vanarticle
gebruiken we de child combinator. Aan het font-size attribuut geven we de waarde larger. Dit is een relatieve maat. Het is beter om die grootte niet expliciet op te geven maar dat door de browser te laten berekenen. Dit zorgt ervoor dat je website responsive is en op alle schermen goed weer gegeven zal worden:article > header { font-size: larger; }
- Een address element met de gegevens van de bron, in dit geval de naam van de auteur. De naam is in een ander lettertype en in het vet
- html:
<address>Peter Jacobs</address>
- css:
Standaard staat hetaddress
element in schuinschrift. Dat zetten we weer recht met de waardenormal
toe te kennen aan het attribuutfont-style
. Verder maken we defont-size smaller
en stellen we een anderfont-family
in dan die van hetbody
element:article > address { font-family: -apple-system, system-ui, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif; font-weight: bold; font-size: small; font-style: normal; }
- html:
- Een
figure
metimg
(de link naar de afbeelding vind je hierboven) enfigcaption
toevoegen.- html:
<figure> <img src=" https://media.standaardboekhandel.be/-/media/mdm/product/9789083048079/frontImagesLink.img" alt="Kaft van het boek Op weg naar De Hartz van Wessel Te Gussinklo"> <figcaption> <span>Wessel Te Gussinklo<br> Op weg naar De Hartz</span><br> Koppernik, 504 blz., 24,50 €<br> <!-- ★☆ --> ★★★★☆ </figcaption> </figure>
- css:
Het lettertype is hetzelfde als voor het tekst in hetsection
element. De font-size is smaller. We gebruiken een child combinator om hetfigcaption
element op te maken:article figure figcaption { font-family: -apple-system, system-ui, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif; }
Zoals je hierboven kan zien hebben we eenspan
element toegevoegd om eerste twee regels af te zonderen. Want die moeten in het vet worden weergegeven. We gebruiken weer een child combinator om dit te doen:article figure figcaption span { font-weight:bold; }
- html:
- Paragrafen erven de
font-family
over vanbody
en defont-size
erft de standaard grootte van 16 pixels. We hoeven dus geen extra stijlregel toe te voegen. Wel moeten we overal waar nodig het schuinschrift toevoegen met deem
tag:<p>Je kunt een poging doen om de inhoud van <em>Op weg naar De Hartz</em> na te vertellen, maar zo eenvoudig werken Wessel te Gussinklo’s romans meestal niet. <em>Op weg naar De Hartz</em> is het vierde boek over de coming of age van Ewout Meyster. Hier staat hij op de rand van de volwassenheid, de ware liefde en het schrijverschap.</p>
-
- Video 3
- De afbeelding opmaken
- De afbeelding is veel te groot. We gebruiken de
height
eigenschap om die aan te passen. Pas altijd maar 1 zijde aan. Als je zowel de hoogte als de breedte instelt zal de verhouding tussen die twee niet meer kloppen. - Het
img
element moet links zweven van hetfigcaption
element. Daarvoor gebruik je defloat
eigeschap. Daarmee geef je aan dat de elementen onder hetimg
element rechts van hetimg
element komen te staan. En dat voor zoveel elementen als er naast hetimg
element plaats is. - Er moet witruimte rechts van en onder de afbeelding toegevoegd worden. Anders plakt de tekst van de figcaption tegen de afbeelding en die van de daarop volgende paragraaf tegen de rand van de afbeelding.
We kunnen dat voor elke rand doen:
margin-right: 1rem; margin-bottom: 1rem;
Of een shorthand property gebruiken:
margin: 0 1rem 1rem 0;
In 1 declaratie stellen we kloksgewijs de boven-, rechter-, onder- en linkerkantlijn in. - Stijlregel voor de afbeelding in het
figure
element van een artikel:article > figure img { height: 10rem; float: left; /* shorthand property */ margin: 0 1rem 1rem 0; margin-left: 0; }
- Op de afbeelding hieronder zie je dat ook de paragraaf die na de
figcaption
staat rechts van de afbeelding staat: Dat is niet wat we willen. Dus gebruiken we declear
eigenschap van het eerstep
element dat na defigure
komt om aan te geven dat de paragraaf niet rechts van de afbeelding moet komen te staan. We gebruiken daarvoor de adjacent sibling combinator:/* adjacent sibling selector (+) selecteert het element dat direct volgt op het eerste opgegeven element */ article > figure +p { clear: both; }
Met dit als resultaat:
- De afbeelding is veel te groot. We gebruiken de
- Boven en onder het
figure
element staat een lijn, maar alleen voor hetfigure
element dat een kind is van hetarticle
element, niet hetfigure
element dat in hetfooter
element staat. Daarom gebruiken we de child combinator:article > figure { border-top: solid black 1px; border-bottom: solid black 1px; height: 12rem; padding-top: 1rem; }
- Het recensieartikel moet in het midden gecentreerd staan. Daarvoor stellen we de padding eigenschap van het body element in. We gebruiken het percent teken om ervoor te zorgen dat het artikel in het midden staat ongeacht de grootte van het scherm (responsive):
body { font-family: Georgia, serif; padding: 0 20% 0 20%; }
- Nu het
blockqoute
element:blockquote { border-top: solid black 1px; padding: 1rem 0 0 0; text-align: center; margin: 1rem 10% 1rem 10%; font-weight: bold; font-style: italic; }
- En tenslotte het
footer
element- html
<footer> <p>Verschenen op zaterdag 3 oktober 2020</p> <figure> <img src="https://static.standaard.be/Assets/Images_Upload/2013/05/03/DSMedewerkers_Peter_Jacobs.jpg" alt="Foto van Peter Jacobs"> <figcaption> <p>Peter Jacobs</p> <p>Peter Jacobs is redacteur letteren bij De Standaard.</p> <a href="#">Meer artikels van Peter Jacobs</a> </figcaption> </figure> </footer>
- css
- De de paragraaf met verschijningsdatum moet in het grijs. We gebruiken nu de hexadecimale waarde voor grijs. Dat is alleen geldig voor de
p
elementen die kind zijn vanfooter
. We gebruiken dus weer de child combinator:article footer > p { color: #808080; }
-
De link naar de artikels van Peter Jacobs staat in het rood. Nu gebruiken we de rgb functie:
article footer figcaption a { color: rgb(255, 0, 0); }
-
De naam van de auteur staat in een ander lettertype. De naam moet in hoofdletters en de corpsgrootte is groter. Tussen de paragrafen staat geen witruimte, dus zetten we de onderkantlijn op 0:
article footer figure figcaption p { font-family: -apple-system, system-ui, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif; text-transform: uppercase; font-size: x-large; margin: 0 0 0 0; }
-
De naam staat in het eerste p element in de figcaption. Alle paragrafen na de eerste moeten 'normaal' weergegeven worden. We kunnen dus weer de adjacent sibling combinator gebruiken, namelijk alle paragrafen die op een andere paragraaf volgen:
article footer figure figcaption p +p { text-transform: none; font-size: 1em; }
- We stellen de hoogte in van de afbeelding:
article footer figure img { height: 5rem; float: left; }
- En tenslotte moeten we een grijs kader tekenen rond de
footer
en plaatsen we witruimte tussen het kader in de inhoud:article footer { border: solid #C0C0C0 1px; padding-left: 1em;; }
- De de paragraaf met verschijningsdatum moet in het grijs. We gebruiken nu de hexadecimale waarde voor grijs. Dat is alleen geldig voor de
- html
Resultaat
Video oefening 23